package com.qdlc.p2p.biz.tpp.model;

import java.io.IOException;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.qdlc.p2p.common.constant.Global;
import com.qdlc.p2p.common.constant.SinaConstant;
import com.qdlc.p2p.common.util.DateUtil;
import com.qdlc.p2p.dal.common.SystemConfigHelper;
import com.qdlc.p2p.dal.common.SystemConfigHelper.Nid;

/**
 * 新浪代收交易
 * @author zlhx
 * @version 2.0
 * @date 2015年8月11日 下午7:27:41
 */
public class SinaCollectTrade extends SinaModel {
	
	
	public SinaCollectTrade(){
		super();
	}
	
	/**
	 * 构造方法
	 * @param payer_id            付款人ID
	 * @param out_trade_code      代收交易业务码
	 * @param summary             摘要
	 * @param goods_id            商户标Id
	 * @param can_repay_on_failed 支付失败后是否可以再次支付
	 * @param payer_ip            付款人ip
	 * @param
	 */
	public SinaCollectTrade(String payer_id, String payer_identity_type,String out_trade_code, String summary, String goods_id,
			String can_repay_on_failed, String payer_ip, String amount,String out_trade_no){
		this.out_trade_no = out_trade_no;
		this.out_trade_code = out_trade_code;
		this.summary = summary;
		this.trade_close_time = "1d";
		this.can_repay_on_failed = can_repay_on_failed;
		this.payer_id = payer_id;
		this.payer_identity_type = payer_identity_type;
        // 商户 设置为基本型
        String account_type;
        if(SystemConfigHelper.getValue(Nid.MEMBER_EMAIL).equals(payer_id))
        {
            account_type = SinaConstant.ACCOUNT_TYPE_BASIC;
        } else {
            account_type = SinaConstant.ACCOUNT_TYPE_SAVING_POT;
        }
		this.pay_method = SinaConstant.PAY_METHOD_BALANCE + "^" + amount + "^" + account_type;
		this.setUrl_type(SinaConstant.URL_TYPE_CASH);
		this.setService("create_hosting_collect_trade");
		this.setRequest_time(DateUtil.dateStr3(DateUtil.getNow()));
		this.setEncode(SinaConstant.ENCODE_TRUE);
		// 新浪回调地址
		String webUrl = SystemConfigHelper.getValue(Nid.WEB_URL);
		this.setReturn_url(webUrl + "/tpp/tppSinaAction/tppCollectTradeReturn.html");
		this.setNotify_url(webUrl + "/tpp/tppSinaAction/tppCollectTradeNotify.html");
	}
	
	@Override
	public SinaModel response(String res) throws IOException {
		try {
			JSONObject json = JSON.parseObject(res);
			this.pay_status = json.getString("pay_status");
			this.trade_status = json.getString("trade_status");
			this.out_trade_no = json.getString("out_trade_no");
			this.ticket = json.getString("ticket");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	
	
	/**
	 * 交易订单号
	 */
	private String out_trade_no;
	
	/**
	 * 交易码 - 代收交易业务码
	 */
	private String out_trade_code;
	
	/**
	 * 交易内容摘要
	 */
	private String summary;
	
	/**
	 * 交易关闭时间  (1d)
	 * 设置未付款交易的超时时间，一旦超时，该笔交易就会自动被关闭。
	 * 取值范围：1m～15d。m-分钟，h-小时，d-天 不接受小数点，如1.5d，可转换为36h。
	 */
	private String trade_close_time;
	
	/**
	 * 支付失败后是否可以再次支付
	 * 取值范围：Y、N(忽略大小写)
	 *	Y：可以再次支付
	 *	N：不能再次支付
	 *	默认值为Y
	 *  但是我们程序默认应该是N
	 */
	private String can_repay_on_failed = SinaConstant.SINA_YES;
	
	/**
	 *  商户标的号   (对应“标的录入”接口中的标的号，用来关联此笔代收和标的)
	 */
	private String goods_id;
	
	/**
	 * 付款用户ID
	 */
	private String payer_id;
	
	/**
	 * 标识类型 (UID)
	 */
	private String payer_identity_type;
	
	/**
	 * 付款用户IP地址
	 */
	private String payer_ip;
	
	/**
	 * 支付方式
	 * 格式：支付方式^金额^扩展
	 * 支付方式:网银/余额
	 */
	private String pay_method;
	
	/**
	 * 交易状态
	 */
	private String trade_status;
	
	/**
	 * 后续推进需要的参数
	 */
	private String ticket;
	
	/**
	 * 支付状态
	 */
	private String pay_status;
	
	/**
	 * 待签名字符数组
	 */
	private String[] signParamNames = new String[]{"version","service","request_time","partner_id","_input_charset","out_trade_no","out_trade_code","summary","payer_id","payer_identity_type","pay_method","return_url","notify_url"};
	
	/**
	 * 提交字符数组
	 */
	private String[] subParamNames = new String[]{"version","service","request_time","partner_id","_input_charset","out_trade_no","out_trade_code","summary","payer_id","payer_identity_type","pay_method","return_url","notify_url","sign_type","sign"};

	
	
	/**
	 * 获取 交易订单号
	 * @return 
	 */
	public String getOut_trade_no() {
		return out_trade_no;
	}

	/**
	 * 设置 交易订单号
	 * @param 
	 */
	public void setOut_trade_no(String out_trade_no) {
		this.out_trade_no = out_trade_no;
	}

	/**
	 * 获取 交易码 - 代收交易业务码
	 * @return 
	 */
	public String getOut_trade_code() {
		return out_trade_code;
	}

	/**
	 * 设置 交易码 - 代收交易业务码
	 * @param 
	 */
	public void setOut_trade_code(String out_trade_code) {
		this.out_trade_code = out_trade_code;
	}

	/**
	 * 获取 交易内容摘要
	 * @return 
	 */
	public String getSummary() {
		return summary;
	}

	/**
	 * 设置 交易内容摘要
	 * @param 
	 */
	public void setSummary(String summary) {
		this.summary = summary;
	}

	/**
	 * 获取 交易关闭时间
	 * @return 
	 */
	public String getTrade_close_time() {
		return trade_close_time;
	}

	/**
	 * 设置 交易关闭时间(1d)
	 * @param 
	 */
	public void setTrade_close_time(String trade_close_time) {
		this.trade_close_time = trade_close_time;
	}

	/**
	 * 获取 支付失败后是否可以再次支付 
	 * @return 
	 */
	public String getCan_repay_on_failed() {
		return can_repay_on_failed;
	}

	/**
	 * 设置 支付失败后是否可以再次支付  Y/N
	 * @param 
	 */
	public void setCan_repay_on_failed(String can_repay_on_failed) {
		this.can_repay_on_failed = can_repay_on_failed;
	}

	/**
	 * 获取 商户标的号
	 * @return 
	 */
	public String getGoods_id() {
		return goods_id;
	}

	/**
	 * 设置 商户标的号
	 * @param 
	 */
	public void setGoods_id(String goods_id) {
		this.goods_id = goods_id;
	}

	/**
	 * 获取 付款用户ID
	 * @return 
	 */
	public String getPayer_id() {
		return payer_id;
	}

	/**
	 * 设置 付款用户ID
	 * @param 
	 */
	public void setPayer_id(String payer_id) {
		this.payer_id = payer_id;
	}

	/**
	 * 获取 标识类型 (UID)
	 * @return 
	 */
	public String getPayer_identity_type() {
		return payer_identity_type;
	}

	/**
	 * 设置 标识类型 (UID)
	 * @param 
	 */
	public void setPayer_identity_type(String payer_identity_type) {
		this.payer_identity_type = payer_identity_type;
	}

	/**
	 * 获取 付款用户IP地址
	 * @return 
	 */
	public String getPayer_ip() {
		return payer_ip;
	}

	/**
	 * 设置 付款用户IP地址
	 * @param 
	 */
	public void setPayer_ip(String payer_ip) {
		this.payer_ip = payer_ip;
	}

	/**
	 * 获取 支付方式
	 * @return 
	 */
	public String getPay_method() {
		return pay_method;
	}

	/**
	 * 设置 支付方式
	 * @param 
	 */
	public void setPay_method(String pay_method) {
		this.pay_method = pay_method;
	}

	/**
	 * 获取 待签名字符数组
	 * @return 
	 */
	public String[] getSignParamNames() {
		return signParamNames;
	}

	/**
	 * 设置 待签名字符数组
	 * @param 
	 */
	public void setSignParamNames(String[] signParamNames) {
		this.signParamNames = signParamNames;
	}

	/**
	 * 获取 提交字符数组
	 * @return 
	 */
	public String[] getSubParamNames() {
		return subParamNames;
	}

	/**
	 * 设置 提交字符数组
	 * @param 
	 */
	public void setSubParamNames(String[] subParamNames) {
		this.subParamNames = subParamNames;
	}

	/**
	 * 获取 交易状态
	 * @return 
	 */
	public String getTrade_status() {
		return trade_status;
	}

	/**
	 * 设置 交易状态
	 * @param 
	 */
	public void setTrade_status(String trade_status) {
		this.trade_status = trade_status;
	}

	/**
	 * 获取 支付状态
	 * @return 
	 */
	public String getPay_status() {
		return pay_status;
	}

	/**
	 * 设置 支付状态
	 * @param 
	 */
	public void setPay_status(String pay_status) {
		this.pay_status = pay_status;
	}

	/**
	 * 获取 后续推进需要的参数
	 * @return 
	 */
	public String getTicket() {
		return ticket;
	}

	/**
	 * 设置 后续推进需要的参数
	 * @param 
	 */
	public void setTicket(String ticket) {
		this.ticket = ticket;
	}
	
	
	
}
